home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 2 / BBS in a box - Trilogy II.iso / Files / Hyper / U-Z / Windoids #9 / WINDOID #9 (Part 2) < prev   
Encoding:
Text File  |  1989-11-07  |  28.0 KB  |  702 lines  |  [TEXT/EDIT]

  1. September 11, 1989
  2.  
  3. WINDOID #9 (Part 2)
  4.  
  5. A Publication for the Informed HyperCard User and the Newsletter for the Apple
  6. HyperCard User Group
  7.  
  8. EDITOR:  DAVID LEFFLER
  9.  
  10. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  11.  
  12. IN THIS ISSUE:
  13. Part 1
  14. • Editor's Corner
  15. • HyperCard User Tips
  16. • Corrupted Stacks
  17. • ChangeFont
  18. • Stack Evaluation Guidelines
  19. Part 2
  20. • Command Synthesis Exotica
  21. • HyperEducation
  22. • Message History
  23. • Internationalizable StackWare
  24. • HyperCard Novice Corner
  25.  
  26. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  27.  
  28. COMMAND SYNTHESIS AND OTHER HYPERTALK EXOTICA
  29.  
  30. By Hunt Stoddard
  31.  
  32. Few realize that by employing a few simple scripting "tricks," one can fully
  33. exploit the expressive power of HyperTalk and accomplish feats that are
  34. otherwise impossible.  Command synthesis is prime among these.
  35. Using command synthesis, a scriptor first "synthesizes" a HyperTalk command (or
  36. function), then executes it with the "Do" command.  This description is
  37. deceptively simple and does not reveal the great things you can do with this
  38. technique.  For example, imagine you’ve got a stack with a variable number of
  39. background fields, and you want to transfer the contents of these fields into
  40. similarly numbered fields in another stack.  Your first reaction may be to set
  41. up some code to iterate through the "number of fields," transferring field
  42. contents one-by-one.  But there is a much better way to do this.  The following
  43. script simply iterates through the fields, synthesizing "Put" commands and
  44. loading the field values into temporary variables.  Next, we transfer to the
  45. second stack and reverse the process, synthesizing "Put" commands to load the
  46. corresponding fields:
  47.  
  48. on mouseUp --simple command synthesis.
  49.   repeat with i = 1 to the number of fields
  50.   fields
  51.   --synthesize the put command:
  52.     put "put field" && i && "into var" & i into command
  53.     do command --and execute it
  54.   end repeat
  55.   lock screen
  56.   push card
  57.   go stack "Another Stack" --transfer to
  58.  --the second stack
  59.   repeat with i = 1 to the number of fields
  60.  --the reverse put command:
  61.     put "put var" & i && "into field" && i into command
  62.     do command
  63.   end repeat
  64.   pop card
  65.   unlock screen
  66. end mouseUp
  67.  
  68. The same script can be improved to handle the case where the two sets of fields
  69. are named similarly, but not necessarily numbered the same.  In this case, we
  70. save the field names in a separate container called fieldNames.  In the second
  71. stack, we use these names to designate the correct field to load:
  72.  
  73. on mouseUp --named, unordered fields.
  74.   put empty into fieldNames
  75.   repeat with i = 1 to the number of fields
  76.     put "put field" && i && "into var" & i into command
  77.     put the short name of field i into line i of fieldNames
  78.     do command
  79.   end repeat
  80.   lock screen
  81.   push card
  82.   go stack "Another Stack"
  83.   repeat with i = 1 to the number of fields
  84.     put "put var" & i && "into field line i of fieldNames" into command
  85.     do command
  86.   end repeat
  87.   pop card
  88.   unlock screen
  89. end mouseUp
  90.  
  91. The next stop on our exotic tour is an example of handlers passed as
  92. parameters.  This example also employs command synthesis.  The mouseUp handler
  93. below might appear in a button script, whereas the last three handlers would
  94. appear in the card, background, stack, or Home stack scripts.  When the button
  95. is pressed, the askQuestion function is passed the name of either the
  96. affirmDefault function, or the denyDefault function.  Depending on which
  97. function handler is passed, an answer box is displayed with either the "OK" or
  98. "Cancel" buttons as default.  This is admittedly a rather whimpy example and
  99. does not do justice to the practical uses of passing functions and handlers as
  100. parameters.
  101.  
  102. on mouseUp --handlers/Functions as
  103. --parameters
  104.   if askQuestion ("Launchnow?","affirmDefault")
  105.   then answer "You said 'OK'"
  106.   else answer "You said 'Cancel'"
  107. end mouseUp
  108.  
  109. function askQuestion theQuestion, whichFunction
  110.   do "get" && whichFunction && "(theQuestion)"
  111.   return it
  112. end askQuestion
  113.  
  114. function affirmDefault question
  115.   answer question with "CANCEL" or "OK"
  116.   return it is "OK"
  117. end affirmDefault
  118.  
  119. function denyDefault question
  120.   answer question with "OK" or "CANCEL"
  121.   if it is "OK" then return true else return false
  122. end denyDefault
  123.  
  124. The next example was spurred by my desire to surmount HyperCard’s recursion
  125. error checking.  HyperCard is wary of recursion and flags an error if too much
  126. of it happens.  This example involves the recursive creation of objects.  In
  127. traditional object-oriented programming, objects are programming entities.  Why
  128. not use HyperCard’s objects as programming entities as well?  Make a button
  129. called "Factorial" and insert the first script below.  Then make another button
  130. called "Do It" and insert the mouseUp handler below.  Press "Do It."  "Do It"
  131. calls factorial, which clones itself successively and calculates the factorial
  132. of a number.  In the process, it eventually kills all its clones and passes a
  133. value back in returnValue.  As it turns out, this way of calculating the
  134. factorial is about a zillion times slower and messier than doing a direct
  135. recursive call in HyperCard 1.2; so you can make of it what you will.
  136.  
  137. on factorial number --script of btn "Factorial"
  138.   global returnValue
  139.   if number < 0 then
  140.     put zero into returnValue
  141.     exit factorial
  142.   end if
  143.   if number is zero or number is one then
  144.     put 1 into returnValue
  145.     exit factorial
  146.   end if
  147.   get the loc of me
  148.   add 20 to item 1 of it
  149.   add 20 to item 2 of it
  150.   doMenu "New Button"
  151.   set the script of btn (the number of btns) to the script of me
  152.   set the loc of btn (the number of btns) to it
  153.   set the name of btn (the number of btns) to "Factorial" && number
  154.   send "factorial" && number-1 to btn (the number of btns)
  155.   select btn (the number of btns)
  156.   doMenu "Clear Button"
  157.   choose browse tool
  158.   multiply returnValue by number
  159. end factorial
  160.  
  161. on mouseUp --script of btn "Do It"
  162.   global returnValue
  163.   ask "Calculate the factorial of what?"
  164.   if it is empty then exit mouseUp
  165.   send "factorial" && it to btn "Factorial"
  166.   answer returnValue
  167. end mouseUp
  168.  
  169. Next on the list of exotica is a method of passing the "name" of a field to a
  170. handler and letting it reference the field.  This increases flexibility.  For
  171. instance, the handler below will clear out any empty lines from a field.  To
  172. use it, however, you must call it with the format:
  173.  
  174. clearEmptyLines the name of field "one"
  175.  
  176. or
  177.  
  178. clearEmptyLines the name of card field id 3345 etc.
  179.  
  180. Notice that you can easily switch between card and background fields.
  181.  
  182. on clearEmptyLines fieldName
  183.   put "put" && fieldName &&  "into theLines" into command
  184.   do command
  185.   repeat with k = (the number of lines of theLines) down to 1
  186.     if word 1 of line k of theLines is empty
  187.     then delete line k of theLines
  188.   end repeat
  189.   put "put theLines into" && fieldName into command
  190.   do command
  191. end clearEmptyLines
  192.  
  193. Last and least, you can intercept command messages and alter their parameters
  194. if you simply read the parameters, alter them, and reissue the command.  For
  195. example, this answer handler will capitalize any answer string you use:
  196.  
  197. on answer
  198.   get param(1)
  199.   repeat with k = 1 to the number of chars in it
  200.     if chartonum(char k of it) > 91
  201.     then put numtochar(chartonum(char k of it)-32) into char k of it
  202.   end repeat
  203.   send "answer it" to HyperCard
  204. end answer
  205.  
  206. I do hope that some of these "unusual" techniques will find a place, if not in
  207. your heart, then in your scripts.  The easy solutions are not always
  208. straightforward.
  209.  
  210. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  211.  
  212. HYPEREDUCATION
  213.  
  214. By Patricia M. Horton, ETC Associates
  215.  
  216. Welcome! In keeping with the spirit of HyperCard and WINDOID, this column both
  217. shares HyperCard education news and provides a forum for academically-oriented
  218. AHUG members.
  219.  
  220. University of Illinois, Urbana-Champaign, Sociology Department Professor Robert
  221. Alun Jones has reported on a Hypermedia Learning Laboratory. Opened January
  222. 1989, twelve networked Mac IIs run HyperCard and support CD-ROM with
  223. interactive video to serve students and faculty. Simultaneously—in the
  224. University’s residence halls—clusters of Mac SEs run HyperCard. As these
  225. locales mirror each other, projects begun in one environment can be continued
  226. at the other location. Within a year it is hoped the environments will be
  227. linked via a campus-wide network.
  228.  
  229. In the past three years, Professor Jones investigated hypermedia, increased
  230. contacts with the Macintosh community of educators and developed materials for
  231. a course titled "The Social Bond." Active student participation fosters
  232. continued development of materials and stacks. By clicking a "Notes" tab,
  233. students comment directly about stacks, ask questions, and receive answers from
  234. instructors, teaching assistants, or fellow students. Instead of a written exam
  235. and term paper, course requirements include creation of materials. Students
  236. cooperate in educating themselves, one another, and future users of these
  237. accumulating course materials.
  238.  
  239. A HyperCard Workshop now meets weekly for Illini students, faculty, and
  240. administrators to share stack building information and critical comments. A
  241. Hypermedia Projects Group meets monthly so that people from a variety of campus
  242. units can be made aware of ongoing as well as possible applications. The
  243. education topics arecontained in the November issue of Academic Computing
  244. available from:
  245. P.O.Box 804, McKinney, TX 75069
  246.  
  247. Professor Robert Alun Jones can be contacted through AppleLink: A0314.
  248. Questions and comments about HyperEducation may be directed to
  249. Patricia M. Horton @ AHUG.
  250.  
  251. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  252.  
  253. MESSAGE HISTORY
  254.  
  255. by Will Johnston, Steve Russ,
  256. and Kevin Calhoun
  257.  
  258. Here are a couple of lines of HyperTalk you can place in the script of your
  259. Home stack in order to enhance the message box.  There are four handlers, one
  260. each for returnKey, arrowKey, clearMsgHistory, and tabKey.
  261.  
  262. The returnKey handler maintains a list of the messages you send from the
  263. message box.
  264.  
  265. The arrowKey handler recalls one of your stored messages and puts it into the
  266. message box, cycling backwards through the list if the up arrow is pressed and
  267. forwards if the down arrow is pressed.  The message list is a "circular
  268. buffer"; in other words, it wraps around as you cycle through the stored
  269. messages.
  270.  
  271. The clearMsgHistory handler clears the list of stored messages.
  272.  
  273. The tabKey handler does nothing but call clearMsgHistory—you can change this
  274. handler so that the message list is wiped out whenever you prefer.
  275.  
  276. on returnKey
  277.  
  278. -- The user has sent a new message from the
  279. -- message box by pressing the return key.
  280. -- We intercept the message here and store
  281. -- it in a global list, unless we have it stored there already.
  282.  
  283.   global msgCount,msgHistory,whichMessage
  284.  
  285. -- msgCount = the number of stored messages in our global list
  286. -- msgHistory = our global list of stored
  287. -- messages, 1 per line
  288. -- whichMessage = the number of the message now showing in the message box
  289.  
  290.   put msg into thisMessage
  291.  
  292. -- do we have this message already in our global list?
  293.  
  294.   get offset(thisMessage,msgHistory)
  295.  
  296.   if it is 0 then -- we didn’t have this one already
  297.     add one to msgCount
  298.     put thisMessage & return after msgHistory
  299.     put msgCount into whichMessage
  300.   end if
  301.  
  302.   pass returnKey
  303.  
  304. -- This is vital.  If we don’t pass returnKey, the message won’t
  305. -- be sent any further up the hierarchy, and whatever the user
  306. -- wanted to happen won’t happen!
  307.  
  308. end returnKey
  309.  
  310. on arrowKey direction
  311.  
  312. -- The user wants to put one of the messages we’ve stored in
  313. -- our global list into the message box.
  314.  
  315.   global msgCount,msgHistory,whichMessage
  316.  
  317. -- msgCount = the number of stored messages in our global list
  318. -- msgHistory = our global list of stored messages, 1 per line
  319. -- whichMessage = the number of the message to be shown in the message box.
  320.  
  321.   if direction is "up" then
  322.  
  323. -- show the message prior to the current one
  324.  
  325.     subtract one from whichMessage
  326.     if whichMessage is 0 then put msgCount into whichMessage
  327.  
  328. -- "wrap around" from first to last message
  329.  
  330.   end if
  331.  
  332.   if direction is "down" then
  333.  
  334. -- show the message that followed the current one
  335.    add 1 to whichMessage
  336.     if whichMessage > msgCount then put 1 into whichMessage
  337. -- "wrap around" from last to first message
  338.   end if
  339.  
  340.   if direction is "left" or direction is "right" then pass arrowKey
  341.   else put line whichMessage of msgHistory
  342.  
  343. end arrowKey
  344.  
  345. on clearMsgHistory
  346.  
  347. -- forget everything about the message history
  348.  
  349.   global msgCount,msgHistory,whichMessage
  350.   put 0 into msgCount
  351.   put empty into msgHistory
  352.   put 0 into whichMessage
  353. end clearMsgHistory
  354.  
  355. on tabKey
  356.   clearMsgHistory
  357.    pass tabKey
  358. end tabKey
  359.  
  360. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  361.  
  362. WRITING INTERNATIONAL STACKWARE
  363.  
  364. Written by Hans Peter Brøndmo, Apple Japan
  365. Modified by Susan Razura, International Engineering
  366.  
  367.  
  368. This document discusses some important issues that you should keep in mind if
  369. you want your stackware to be localizable.  To localize stackware means to
  370. translate it from its "native" language to some other language and script
  371. system.  This document is intended as a combination of common-sense suggestions
  372. as well as technical information and hints.
  373.  
  374. It is assumed that you have a basic familiarity with the main HyperCard
  375. concepts and terminology when reading this document.
  376.  
  377. When you start planning and designing a new stack, whether it be for your
  378. personal use, shareware or as a commercial product, it is important that you
  379. follow the guidelines outlined in this document.  The "rules" you follow to
  380. make it simpler to localize your stackware will also bring other benefits.
  381. First of all, it will make it easier to maintain your stacks. Therefore, if at
  382. some later date you want to modify your stack or add a new feature, your job
  383. will be easier.  Secondly, you’ll ensure that your stackware will have a place
  384. in international markets.  And you will afford an opportunity for the
  385. translated stack to be just as robust as your original version.
  386.  
  387. As a rule of thumb, one might say that there are two types of stackware as far
  388. as international is concerned.  Firstly, you have stacks that could be run on
  389. any language system without script localization.  Such a stack might, for
  390. example, be your Address Stack.  It should work with little or no changes,
  391. whatever language system your Macintosh is operating with.  The second type of
  392. stack is one that needs to be localized in order to work at all.  More advanced
  393. stackware with complex scripts would normally fall into the second category.
  394. The issues discussed in this document are relevant to developers of stackware
  395. in both categories.
  396. The Guidelines
  397.  
  398. The list below summarizes the guidelines;  the following sections explain them
  399. more fully.
  400.  
  401. 1. Plan text layout carefully.
  402. 2. Place text in fields and avoid paint text.
  403. 3. Avoid text embedded in your scripts / XFCNs.
  404. 4. Document scripts, algorithms and any hidden objects.
  405. 5. Don’t make assumptions about formats.
  406. 6. Use English in your scripts as much as possible.
  407. 7. Try using culturally independent graphics, symbols and icons.
  408.  
  409. Plan Text Layout carefully
  410.  
  411. The amount of text required to express identical content across language
  412. boundaries varies.  Text needs room to grow:  up, down and sideways.  Keep in
  413. mind that characters with diacriticals are widely used outside of the U.S. and
  414. that such characters may extend up to the font ascent line.  Some system fonts
  415. contain characters which extend to both ascent and descent lines.  Likewise,
  416. the size of certain non-Roman fonts is generally more complex and therefore
  417. often needs to be larger than it’s Roman counterparts.  For example, some
  418. non-Roman fonts are not legible on the screen at 9 point.
  419.  
  420. You should, therefore, think carefully about your layout when planning where
  421. and how much text to place on a card.
  422.  
  423. There are two basic ways to put text on a Card.  You can "draw" the text on the
  424. card making it a bitmap, or you can place the text in a field.  Since you can
  425. achieve certain special effects such as stretching, distorting and simple
  426. animation by placing text directly on the card as a bitmap image, there are
  427. situations where it will be the right thing to do.
  428.  
  429. Normally, though, if all you want is simple text on a screen, you should place
  430. it in a text field.  Placing text in a Text Field has two immediate advantages.
  431. Firstly, it greatly simplifies localizing and changing the text.  Secondly, you
  432. will normally save space by placing text in a field as opposed to making it
  433. picture.  Furthermore, it is obviously not possible to search for text which is
  434. not in a text field, nor is it possible to read it in any other way.
  435.  
  436. If you are using bitmapped text, try to use a font that supports the full
  437. Macintosh character set, and make the font available to those who will be
  438. translating.
  439.  
  440. Button text
  441.  
  442. If you set the Show Name property of a button to true, note that the name of
  443. the button will change in the localization process.  Furthermore, if you
  444. reference that button in a script by calling it by name, this will have to be
  445. localized as well.  (See the next section on "text embedded in your scripts.")
  446. It would be better to reference the button by its ID.  Another possiblity would
  447. be to turn off the Show Name property and create a transparent field over the
  448. button to display the name.
  449.  
  450. Avoid text embedded in your scripts
  451.  
  452. The Macintosh supports "resources" as a way of separating certain types of data
  453. from an application.  In other words, data such as strings that belong to the
  454. application do not need to be embedded in the code, indeed they should not be
  455. embedded.  This greatly simplifies the software localization process.
  456. HyperCard stacks can also contain resources.  For example, sound is stored as a
  457. resource in HyperCard or the stack.
  458.  
  459. Text strings in a HyperCard script are included in the scripts themselves,
  460. causing potential problems for localization.  There are some possible
  461. workarounds for this problem.  One solution could be to place all strings in an
  462. invisible text field and to simply index into the field to get the strings.
  463. Another option would be to save the strings in resources and extend HyperTalk
  464. so it can access the strings.  Finally, if you choose not to incorporate one of
  465. the above solutions, you can still simplify the localization effort immensely
  466. by making a note of where such text resides in your stacks.  It could be just a
  467. simple comment in the beginning of your script such as
  468.  
  469. -- All text to be translated can be found on lines ending with "-- ***".
  470.  
  471. This way the translator need only search for the specified pattern to find all
  472. instances of text that need to  be translated.
  473.  
  474. Document your scripts, algorithms and any hidden objects
  475.  
  476. It cannot be emphasized strongly enough how important it is that you document
  477. your work.  Some people plan and design carefully before writing an
  478. application, others are of a more impulsive nature, writing their scripts based
  479. on an idea that they have not clearly formulated when starting.  Which ever
  480. category you belong to, it is crucial to the success of your project that you
  481. document and comment as you go along.
  482.  
  483. The first basic type of documentation is in scripts that contain in-line text.
  484. Comment as you write your scripts and update the comments as you make changes.
  485. The second type of documentation applies to high-level descriptions.  For
  486. complex message handlers of an object, you should include a description of your
  487. object and of the algorithms you are using, if any.  Furthermore you may find
  488. it very useful to note where you are implementing message handlers (i.e., what
  489. objects implement the methods for what messages).  You should also discuss
  490. "global dependencies" that are important for your script to work properly.  A
  491. breakdown of the control structure would also be helpful.
  492.  
  493. Equally rigorous rules for documentation naturally apply to XCMDs.  The source
  494. code for an XCMD should be documented carefully in line with normal coding
  495. practice.  Furthermore, your stackware documentation should contain a section
  496. outlining what XCMDs are used.  Specifically, it is important to think about
  497. and document how your XCMDs might be affected by international issues.  Such
  498. issues might be related to printing, date and time formats or script manager
  499. compatibility.
  500.  
  501. NOTE!  You probably should not rely on going back to comment your work after
  502. you finish scripting.   It is inevitable that as time passes, you will forget
  503. the specifics of the implementation of an algorithm or trick in your HyperTalk
  504. script.  Write comments as you write scripts, and update them when you make
  505. modifications.
  506.  
  507. Don’t make assumptions about formats
  508.  
  509. Dates
  510. HyperCard supports a variety of date formats.  But it is up to the HyperTalk
  511. script writer to ensure that his or her script will work regardless of the date
  512. format of the system that is currently being used.  For example, the date
  513. format for the short date in HyperTalk is "88.06.01" in Japanese, "01.06.88" in
  514. English, and "06.01.88" in Norwegian.  The long date is equally different.  So
  515. your script ought to take these varying formats into account.  Perhaps the best
  516. way to ensure cross-language compatibility is to use the HyperTalk DateItems
  517. function.  DateItems gives you a set of number items indicating the year (in
  518. the Roman calendar), month, day, hour, minute, second and day of week.  To find
  519. the name of a month, day, etc., you can do a lookup in a table (e.g., a text
  520. field).  This table should be clearly marked, making it easily localizable.
  521.  
  522. The International Utilities in the Macintosh Operating System provide support
  523. for other formats,  namely:
  524.  
  525. Numbers
  526. The characters which denote the decimal point and thousands separator vary from
  527. country to country.
  528.  
  529. Units of Measure
  530. Currency symbols differ among countries as do the use of metric and SAE
  531. measurement.
  532. Sorting and Searching
  533. Different language systems handle the ordering of characters in different ways.
  534.  
  535. If you are making any assumptions about formats in your scripts, you should
  536. clearly indicate where you are doing so and what those assumptions are.  This
  537. way localization is simplified, and it becomes possible to change the scripts
  538. where needed to make them compatible with different formats.
  539.  
  540. Likewise, you can write an XFCN that will find out what language system you are
  541. currently using and deal with formats thereafter.
  542.  
  543. Power Keys
  544. You should also be aware that the power keys are localized in the various
  545. language versions of the HyperCard application.  For example, with power keys
  546. turned on, "r" will perform the revert function in the English version of
  547. HyperCard, while in the Swedish version, it turns the grid on or off.
  548.  
  549. Grammar
  550. The rules for punctuation and word order are not the same for all languages.
  551. Allow for flexibility in this context.
  552.  
  553. Use as much English as possible in your scripts
  554.  
  555. The previous section on "avoiding embedded text in scripts" discusses a couple
  556. of possible solutions for how to avoid placing text "in-line" in HyperTalk
  557. scripts.  Likewise, you should try to avoid placing non- English arguments in
  558. your scripts as well.  In particular, this relates to the HyperTalk "doMenu"
  559. command. The command
  560.  
  561. <doMenu menuItemName>
  562.  
  563.  should always use the English menuItemName.  All versions of HyperCard will
  564. work with the English name of a menu item as the argument to doMenu, while only
  565. the localized version will work with the "translated" name of a menu item.
  566. Therefore, by using the English name, you will ensure that your doMenu command
  567. will always work correctly, regardless of the language version of HyperCard.
  568.  
  569. Use Culturally Neutral Graphics and Symbols
  570.  
  571. To further aid localization and cross-cultural translations, you should think
  572. carefully about the symbolism and graphics that you use in your stacks.  There
  573. are two main concerns that you might want to keep in mind.  One is that symbols
  574. that have a clear and unambiguous meaning in your own culture might not be
  575. known in another.  The other is that specific nationalistic or patriotic
  576. imagery and symbolism might confuse or even offend people from other countries.
  577.  
  578. Some examples of items that differ around the world…
  579.  
  580. •  Holidays.
  581. • Religious practices.
  582. •  Address formats, including "ZIP" codes and phone numbers.
  583. •  Telephones and mailboxes.
  584. •  Mortgage and interest calculations.
  585. •  Communications, data transmission and reception.
  586. •  Keyboard layouts and character sets.
  587. •  Paper sizes.
  588. •  Text data compaction and encoding must allow character codes from $20 to $FF
  589. •  Bikini-clad women and champagne bottles are not acceptable in the Arab world
  590.  
  591. Such items should be easily modifiable if your stack is to be translated into
  592. another language.  However, keep in mind that there are many small countries
  593. throughout the world who sell Macintosh computers but do not localize the
  594. software.  Such countries will take the English language version, so you will
  595. want to make sure that the original design is culturally acceptable.  Use
  596. common sense and try your design out on people that have a different background
  597. than your own.
  598.  
  599. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  600.  
  601. HYPERCARD NOVICE CORNER
  602.  
  603. by Phil Wyman
  604.  
  605. This Novice Corner should be fun and easy for us HyperCard novitiates.  We’ll
  606. put a picture on a button!  The hackers call these pictures "icons," so if you
  607. want to pretend you’re not a novice when you’re at a party or something,
  608. definitely call it an "icon."
  609. Choose "New Button" from the Objects menu. (NOVICES NOTE: If you don’t have an
  610. Objects menu, please read Windoid #7’s Novice Corner that describes in
  611. mind-wrenching detail how to get the Objects menu to appear.)  A new button
  612. should appear on your screen with marching ants around it. Choose "Button info"
  613. from the Object menu and click on the button that says "ICON".
  614.  
  615. Now, you are given a series of pictures that are available to you. Click on one
  616. of these pictures to select it. Your selected picture should now be highlited.
  617. Click on the "OK" button.
  618.  
  619. Now your button will look differently. It will have a picture on it!!!  You
  620. will probably have to reshape your button to see the whole picture. To do this,
  621. click on a corner of the button and hold the mouse down and pull to make the
  622. button bigger. Along with seeing your entire picture, you should see the words
  623. "New Button" below the picture, which is the actual name of the button. Let’s
  624. change that name.
  625.  
  626. Choose "Button info" from the Objects menu. On the ensuing window, which is
  627. called a "modal dialog box" by non-novices, type in your new name. The new name
  628. should go directly into the top of the window.  Click the OK button.
  629.  
  630. Now when you look at your button, you should have a new name below your
  631. picture.
  632.  
  633. Let’s try to reposition the button to a different place on the screen.  The
  634. trick is to point to the center of the button with the mouse,  then hold down
  635. the mouse button, and move the mouse around. Try it!
  636.  
  637. If you’ve gotten this far,  have a JOLT cola  and a twinkie, and stay up all
  638. night with HyperCard.
  639.  
  640. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  641.  
  642. If you would like information about AHUG, write to:
  643.  
  644. Apple HyperCard User Group
  645. MS/27-AHUG
  646. 20525 Mariani Ave.
  647. Cupertino, CA 95014
  648. Our AppleLink is:  UG.AHUG
  649.  
  650. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  651.  
  652. THE FORM
  653.  
  654. If you have a bug, suggestion, comment, or just want to know the best way to do
  655. something in HyperCard, you can fill out the form below and send it to:
  656.  
  657. AHUG c/o David Leffler
  658. Apple Computer, Inc.
  659. MS / 22-Q
  660. 20525 Mariani Ave.
  661. Cupertino, CA 95014
  662.  
  663. Or copy the format and
  664. AppleLink(TM) it to:
  665. HYPERBUG$
  666.  
  667. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  668.  
  669. TELL HYPERCARD
  670. You can use this form to notify the HyperCard team of problems, bugs, and
  671. enhancement requests.
  672.  
  673. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  674.  
  675. THE FORM:
  676.  
  677. Please use the following form to make a difference in the world:
  678.  
  679. Date:
  680. Name:
  681. Address:
  682. Phone #:
  683. Versions of:
  684. a.  HyperCard:
  685. b.  Associated software:
  686. c.  System Software:
  687. 1. System
  688. 2. Finder
  689. 3. ImageWriter file
  690. 4. LaserWriter file
  691. 5. Any others
  692. Type of Macintosh:
  693. Peripherals:
  694. Description of problem, suggestions or comments:
  695.  
  696.  
  697. If you have some information for us please fill this form out as completely as
  698. possible and send it to us.  You will be glad you did!
  699.  
  700.  
  701.  
  702.